//第八天错题

//1.二维数组元素访问
//x[i][j]
//*(x[i]+j) 与上式同义，x[i]表示第i+1行的首地址，+j表示该行的第j+1个元素
//*(*(X+i)+j) 与上式同义，*(x+i) == x[i]

//2.字符个数统计（利用哈希表）
#include <stdio.h>
#include <string.h>

int main()
{
	char string[500] = { 0 };
	int count = 0;

	while (scanf("%s", string) != EOF)
	{
		//利用哈希表，将出现过的字符以下标的形式储存在hash中
		int hash[128] = { 0 };
		int len = strlen(string);
		int i = 0;

		for (i = 0; i < len; i++)
		{
			if (hash[string[i]] == 0)
			{
				count++;
				hash[string[i]] = 1;
			}
		}
		printf("%d", count);
	}
	return 0;
}
//3.多数元素
//法一：暴力遍历
int majorityElement(int* nums, int numsSize)
{
    int count = 0;
    int i = 0;
    for (i = 0; i < numsSize; i++)
    {
        int  j = 0;
        count = 0;
        for (j = 0; j < numsSize; j++)
        {
            if (*(nums + i) == *(nums + j))
            {
                count++;
            }
        }
        if (count > numsSize / 2)
        {
            goto end;
        }

    }
end:return *(nums + i);
}

//法二：
//将第一个元素设为tmp，在遍历数组的过程中，如果元素等于tmp 计数器加一，否则计数器减一
//如果计数器为0，则设下一个元素，i+1为tmp，接着遍历数组
//直到遍历完数组，且计数器不为零，则当前的tmp即为多数元素
int majorityElement(int* nums, int numsSize)
{
    int count = 1;
    int tmp = nums[0];
    int i = 0;

    for (i = 1; i < numsSize; i++)
    {
        if (tmp == nums[i])
        {
            count++;
        }
        else
        {
            count--;
            if (count == 0)
            {
                tmp = nums[i + 1];
            }
        }
    }
    return tmp;
}